﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _7_Agent
{
    /*
     定义代理所真正实体和代理的公共接口。这样在任何RealSubject的地方都能使用Proxy类
         */
    abstract class Subject
    {
        public abstract void Request();
    }

    /*代理代表的真实实体*/
    class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真实的请求");
        }
    }

    /*
      保存一个引用使得代理可以访问实体，并提供一个与Subject的接口相同的接口。这样代理用来代替实体
     */
    class Proxy : Subject
    {
        RealSubject realSubject;
        public override void Request()
        {
            if (realSubject == null)
            {
                realSubject = new RealSubject();
            }
            realSubject.Request();
        }
    }
}
